[Snyk] SBOM testためしてみた
こんにちは、豊島です。
はじめに
2024年8月29日に発表されたSBOMを活用したソフトウェアの脆弱性を管理する具体的な手引でより踏み込んだSBOMの体制整備、管理、運用方法が公開されました。
中でもSBOM取引モデル
にある
ソフトウェア部品の受発注において、調達者と供給者の間でSBOMに関して契約に規定すべき事項(要求事項、責任、コスト負担、権利等)について参考となる例を示す。
既存のソフトウェアに関するモデル契約書と組合せることで、SBOMに対応した契約書を作成する際の項目案を提示するもの。
出典:
ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導入に関する手引ver2.0概要資料(PDF形式:1,208KB)(経済産業省)(https://www.meti.go.jp/press/2024/08/20240829001/20240829001-2.pdf)
は今後の動きに注目していく必要がありそうです。
そもそもSBOMとは
上記で詳細に解説されていますが、
JavaScript実行環境の立場から誤解を恐れずに言うと、SBOMファイルはnode_modules
,package.json
,package-lock.json
ファイルに記載されているパッケージ情報を基に、依存関係、(脆弱性情報)を記載したファイルです。
SBOMファイルはプロジェクト、パッケージのバージョン、依存関係といった最小限の情報を記載しておき、SBOMファイルを使って特定のサービスやSaaSから脆弱性のチェックをしているパターンが多いように感じます。
またSBOMファイルを生成、テストするタイミングとしては開発中(利用パッケージが変わる可能性があるフェーズ)というよりは、納品/デプロイ前が適切ではないかと考えています。(経済産業省の資料に記載されている SBOMに対応した契約書を作成する というのも納得できます)
加えてSnykが公開しているParlayというSBOMファイルに脆弱性情報を追加してくれるOSSがあるのですが、これは別の機会に紹介しようと思います。
SBOMを生成、テストしてみる
前提条件
- 2024/12/13時点 SnykでSBOMファイルを生成、テストする場合はEnterpriseプランが必要です
- 今回はJavaScript(npm)のプロジェクトを対象とします
- その他、パッケージマネージャーの対応可否はドキュメントを確認ください
事前準備
- Snyk CLIをインストール(ドキュメントはこちら)、アカウント認証を済ませておく
SBOMを生成してみる
今回はCycloneDXのフォーマットで出力します(前提条件に記載したドキュメントでその他対応しているフォーマットが確認できます)
リポジトリの任意の階層で下記コマンドを実行するとSBOMファイルが生成されます
snyk sbom --format=cyclonedx1.6+json > cyclonedx1.6_mysbom.json
(厳密にチェックしたい場合は--strict-out-of-sync
オプションが有効です)
補足
しっかり検証した訳ではないですが、--strict-out-of-sync
オプション無しで
node_modules
があれば参照node_modules
がなければpackage.json
とpackage-lock.json
を参照(package-lock.json
がなければ失敗する)
という結果でした
npm i
->snyk sbom --strict-out-of-sync=true
の流れがベターかと思います
SBOMをテストしてみる
SBOMファイルを指定してコマンドを実行すると結果が返却されます
- Severity levels(今回はMEDIUMですが、CRITICAL > HIGH > MEDIUM > LOWとレベルが分かれています)
- 詳細情報が確認できるURL
がポイントになりそうです
snyk sbom test --experimental --file=./cyclonedx1.6_mysbom.json
Testing ./cyclonedx1.6_mysbom.json
Open issues:
× [MEDIUM] Improper Input Validation
Introduced through: pkg:npm/nanoid@3.3.7
URL: https://security.snyk.io/vuln/SNYK-JS-NANOID-8492085
╭───────────────────────────────────╮
│ Test summary │
│ Organization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │
│ Test type: Software Bill of Materials │
│ Path: ./cyclonedx1.6_mysbom.json │
│ │
│ Open issues: 1 [ 1 MEDIUM ] │
╰───────────────────────────────────╯
最後に
今回はSnykでSBOMの生成、テストを実施しました。
SnykはSDLC全体のセキュリティを向上するべく、Shift-Leftの思想で脆弱性をそもそも生み出さないための機能が充実しています。
そこで納品/デプロイ前(開発ライフサイクルの終盤)にSBOMファイルの生成、テストをすることでより強固なセキュリティ体制を整えられるのではと感じています。
どなたかの参考になれば幸いです。